/*
 * Copyright (c) 2021 az13js
 * meson_gtk is licensed under Mulan PSL v2.
 * You can use this software according to the terms and conditions of
 * the Mulan PSL v2.
 * You may obtain a copy of Mulan PSL v2 at:
 *          http://license.coscl.org.cn/MulanPSL2
 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF
 * ANY KIND,EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
 * NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
 * See the Mulan PSL v2 for more details.
 */

/*
 * 此文件实现了同名头文件里声明的各个函数。整体的说明参考头文件，这里所包含的程序注释
 * 仅用于备注具体的执行细节。
 */
#include "meson_gtk.h"
#include <gtk/gtk.h>

/*
 * 全局变量，存储文本输入部件的正在编辑的输入缓冲。临时用来调试使用。
 * 这个指针在激活信号处理函数activate在组装界面UI元素时被设置，之后不用再设置了。
 * 定义这个变量的作用只是方便在信号处理函数里直接使用。
 */
GtkTextBuffer *text_buffer;

void activate(GtkApplication *app, gpointer user_data) {
    /* 这里绘制UI界面所需的各种部件——在这里，我准备了一个主窗口，
       然后往里面添加了一个文本输入用的输入框。 */
    GtkWidget *main_window = gtk_application_window_new(app);
    GtkWidget *input_text_widget = gtk_text_view_new();
    gtk_window_set_child(GTK_WINDOW(main_window), input_text_widget);

    /* 给输入框绑定信号backspace激活的函数，在终端输入一个提示消息用于测试和调试 */
    g_signal_connect(input_text_widget, "backspace", G_CALLBACK(backspace_message), NULL);
    /* 让GTK显示主窗口 */
    gtk_widget_show(main_window);

    text_buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(input_text_widget));
}

void backspace_message() {
    GtkTextIter start, end;
    gtk_text_buffer_get_start_iter(text_buffer, &start);
    gtk_text_buffer_get_end_iter(text_buffer, &end);
    char *str = gtk_text_buffer_get_text(text_buffer, &start, &end, FALSE);
    g_print("Backspace按键已经被按下。以下是编辑中的文本：\n");
    g_print(str);
    g_print("\n");
    free(str);
}

void print_im_context_id() {
    /* TODO 为什么这个地方无法将输入法设置为别的 */
    GtkIMContext* im = gtk_im_multicontext_new();
    //gtk_im_multicontext_set_context_id(GTK_IM_MULTICONTEXT(im), "fcitx");
    g_print(gtk_im_multicontext_get_context_id(GTK_IM_MULTICONTEXT(im)));
    g_print("\n");
    g_object_unref(im);
}
